package com.itnoob.controller.service;

import java.math.BigDecimal;

/**
 * 模板方法类
 * @author zhoujun
 * @date 2025/3/21 21:15
 */
public abstract class AbstractPayService implements PayService {

    @Override
    public final void pay(BigDecimal amount){
        //支付之前检查金额是否合法
        checkAmount(amount);
        //支付过程
        doPay(amount);
        //支付之后,打印支付结果
        printResult(amount);
    }

    /**
     * 定义一个抽象方法,用于执行具体的支付策略
     * @param amount
     */
    protected abstract void doPay(BigDecimal amount);

    /**
     * 定义一个默认的方法,用于检查金额是否合法
     * @param amount
     */
    protected  void checkAmount(BigDecimal amount){
        if (amount == null || amount.compareTo(BigDecimal.ZERO) <= 0){
            throw new IllegalArgumentException("金额不合法!");
        }
        System.out.println("检测金额合法!");
    }

    /**
     * 定义一个默认的方法,用于打印支付结果
     * @param amount
     */
    protected  void printResult(BigDecimal amount){
        System.out.println("支付"+ amount + "元成功!");
    }

}
